"""
!/usr/bin/env python
-*- coding: utf-8 -*-
@Author  : MarkJia
@Site    : 
@File    : 16、文件上传及页面弹框处理.py
"""

"""
文件上传：
1、若是input标签，可以直接使用send_keys(文件地址)
ele = driver.find_element_by_id("上传按钮id")
ele.send_keys(文件路径 + 文件名)
"""
import time
from selenium import webdriver
from selenium.webdriver.common.by import By


# ==========================================   文件上传 ===========================================================
class Testfile:

    # 用例前置：打开浏览器
    def setup(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        # 设置隐式等待 : 10s
        self.driver.implicitly_wait(10)

    # 用例后置：关闭浏览器
    def teardown(self):
        self.driver.quit()

    def test_input_file(self):
        self.driver.get('https://image.baidu.com/')
        # 点击按钮
        self.driver.find_element(By.XPATH, "//*[@class='st_camera_off']").click()
        # input 标签本地上传  <input type="file" name="images" id="stfile" size="2">
        """
         源码：
         file_input = driver.find_element_by_name('profilePic')
         file_input.send_keys("path/to/profilepic.gif")
         """
        self.driver.find_element(By.CSS_SELECTOR, "#stfile").send_keys(
            "D:\Project_Workspace\Auto\webtest\search_res.png")
        time.sleep(5)


#  ================================    弹框处理机制：alert、confirm、prompt  ==========================================
"""
页面操作过程中，会遇到 JavaScript 所生成的 alert、confirm、prompt 弹框，可以使用 switch_to.alart()方法定位到，
然后使用 text/accept/dismiss/send_keys 等方法进行操作。
1、switch_to.alert()  获取当前页面的警告框
2、text : 返回 alert/confirm/prompt 中的文本信息
3、accept() : 接受现有的告警框
4、dismiss() : 解散现有告警框
5、send_keys(keysToSend) : 发送文本至告警框。keyToSend ： 将文本发送至警告框
"""

# 模拟弹框
"""
window.alert("这是一个弹框")

"""
from selenium.webdriver import ActionChains


class Testalert:

    # 用例前置：打开浏览器
    def setup(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        # 设置隐式等待 : 10s
        self.driver.implicitly_wait(10)

    # 用例后置：关闭浏览器
    def teardown(self):
        self.driver.quit()

    def test_alert(self):
        """
        1. 打开 https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable 网页
        2. 操作窗口右侧页面，将元素 1 推拽到 元素 2
        3. 这时候会有一个 alert 弹框，点击弹框中的 "确定" 按钮
        4. 然后点击 "点击运行"
        5. 关闭网页
        """
        self.driver.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
        # 切换frame ： 遇到嵌套的界面，先查看页面元素是否有 iframe 元素
        self.driver.switch_to.frame('iframeResult')
        # 利用action拖拽元素
        action = webdriver.ActionChains(self.driver)
        drag = self.driver.find_element(By.CSS_SELECTOR, "#draggable")
        drop = self.driver.find_element(By.CSS_SELECTOR, "#droppable")
        # 拖拽元素并提交
        action.drag_and_drop(drag, drop).perform()
        time.sleep(2)

        print('点击 alert 确定')
        # 切换到 alert 弹框并点击确定 accpet() ： 接受弹框
        self.driver.switch_to.alert.accept()

        # 切换到 父级frame/默认的frame
        self.driver.switch_to.default_content()

        # 最后点击运行按钮
        self.driver.find_element(By.CSS_SELECTOR, "#submitBTN").click()
        time.sleep(2)
